<!DOCTYPE html>
<html>
    <head>
        <title>Image set parsing</title>
        <link rel="author" title="Noam Rosenthal" href="mailto:noam.j.rosenthal@gmail.com">
        <link rel="help" href="https://drafts.csswg.org/css-images-4/#image-set-notation">
        <meta name="assert" content="General image-set parsing  follows CSS Images 4 rules.">
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
    </head>
    <body>
        <script>
                const tests = [
                    { property: 'background-image', imageSet: "url(example.png) 1x", valid: true },
                    { property: 'background-image', imageSet: "url('example.png') 1x", valid: true },
                    { property: 'background-image', imageSet: "'example.jpg' 1x", valid: true },
                    { property: 'background-image', imageSet: "url(example.png) 1x, 'example.png' 2x", valid: true },
                    { property: 'background-image', imageSet: "url(example.png) 1dppx", valid: true },
                    { property: 'background-image', imageSet: "url(example.png) 1dpi", valid: true },
                    { property: 'background-image', imageSet: "url(example.png) 1dpcm, 'example.png' 2x", valid: true },
                    { property: 'background-image', imageSet: "'example.jpeg' 222dpi, url(example.png) 3.5x", valid: true },
                    { property: 'background-image', imageSet: "linear-gradient(black, white) 1x", valid: true },
                    { property: 'content', imageSet: "linear-gradient(black, white) 1x, 'example.png' 4x", valid: true },
                    { property: 'content', imageSet: "url('example.png') 192dpi, linear-gradient(black, white) 1x", valid: true },

                    { property: 'background-image', imageSet: "none, url(example.png) 1x", valid: false },
                    { property: 'background-image', imageSet: "", valid: false },
                    { property: 'background-image', imageSet: "url(example.png) 0x", valid: false },
                    { property: 'background-image', imageSet: "url(example.png) -20x", valid: false },
                    { property: 'background-image', imageSet: "'example.jpeg' 92pid url(example.png) 1x", valid: false },
                    { property: 'cursor', imageSet: "linear-gradient(black, white) 1x", valid: false }
                ]

                function check_image_set(tst) {
                        var div = document.createElement('div');
                        div.setAttribute("style", `${tst.property}: image-set(${tst.imageSet})`)

                        var inline_style = div.style.getPropertyValue(tst.property);
                        assert_equals(inline_style.startsWith('image-set'), tst.valid);

                        document.body.appendChild(div);
                        var computed_style = getComputedStyle(div).getPropertyValue(tst.property);
                        assert_equals(computed_style.startsWith('image-set'), tst.valid);

                        div.remove();
                }

                tests.forEach(tst => {
                        test(() => {
                                check_image_set(tst);
                        }, `${tst.property}: image-set(${tst.imageSet}) ${tst.valid ? "[ parsable ]" : "[ unparsable ]"}`)
                });
        </script>
    </body>
</html>
